其他
关于Python中的__main__和编程模板
在python程序中经常可以看到 if__name__ == ' _ _ main _ _'
的判定,下面来解释下。
首先在python
交互式界面中输入以下程序,然后运行。
print(__name__)
得到的结果为:
__main__
简单的说,每当运行一个python
脚本的时候,都会自动生成一个variable
叫__name__
。
如果直接运行此脚本,__name__
的值则自动为 __main__
。若果此脚本是在其它脚本中被作为一个包导入运行的 (每个python脚本都可以直接作为一个包来使用),__name__
的值会自动为其所在文件的文件名。
通过下例来帮助理解。在名为test1.py
的脚本中输入以下:
if __name__ == '__main__':
print('The __name__ is:', __name__, 'which means you are running the script directly')
else:
print('The __name__ is:', __name__, 'which means you are running the script from importing')
首先运行此程序,结果为:
The __name__ is: __main__ which means you are running the module directly
然后在另一个脚本中(如果不熟悉PYTHONPATH环境变量,则在同一个目录运行)中输入:
import test1
运行此module后结果为:
The __name__ is: test1 which means you are running the module from importing
因此,if__name__ == ' _ _ main _ _':
可用来限定脚本读取的环境,从而保证该脚本在做为包被导入时不会直接启动程序的执行。
提供个Python的模板
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from __future__ import division, with_statement
'''
Copyright 2017, 生信宝典
===========================================================
'''
__author__ = 'SXBD'
__author_email__ = 'train@ehbioc.om'
#=========================================================
# 程序描述,会在运行时输出
desc = '''
Program description:
'''
# 导入常用包
import sys
import os
from time import localtime, strftime
timeformat = "%Y-%m-%d %H:%M:%S"
from optparse import OptionParser as OP
# 并行运行时使用
#from multiprocessing.dummy import Pool as ThreadPool
# 解析网页时使用
#from bs4 import BeautifulSoup
# 出现编码错误时使用
#reload(sys)
#sys.setdefaultencoding('utf8')
# 全局变量,用于调试
debug = 0
# 命令行参数
def cmdparameter(argv):
if len(argv) == 1:
global desc
print >>sys.stderr, desc
cmd = 'python ' + argv[0] + ' -h'
os.system(cmd)
sys.exit(1)
usages = "%prog -i file"
parser = OP(usage=usages)
parser.add_option("-i", "--input-file", dest="filein",
metavar="FILEIN", help="")
parser.add_option("-n", "--number", dest="number",
type="int", help="Supply an int number")
parser.add_option("-v", "--verbose", dest="verbose",
action="store_true", help="Show process information")
parser.add_option("-D", "--debug", dest="debug",
default=False, action="store_true", help="Debug the program")
(options, args) = parser.parse_args(argv[1:])
assert options.filein != None, "A filename needed for -i"
return (options, args)
#--------------------------------------------------------------------
def main():
options, args = cmdparameter(sys.argv)
#-----------------------------------
file = options.filein
verbose = options.verbose
global debug
debug = options.debug
#-----------------------------------
if file == '-':
fh = sys.stdin
else:
fh = open(file)
#--------------------------------
for line in fh:
pass
#-------------END reading file----------
#----close file handle for files-----
if file != '-':
fh.close()
#-----------end close fh-----------
###--------multi-process--并行使用----------------
#pool = ThreadPool(5) # 5 represents thread_num
#result = pool.map(func, iterable_object)
#pool.close()
#pool.join()
###--------multi-process------------------
if verbose:
print >>sys.stderr, "--Successful %s" % strftime(timeformat, localtime())
if __name__ == '__main__':
startTime = strftime(timeformat, localtime())
main()
endTime = strftime(timeformat, localtime())
# 运行日志记录
fh = open('python.log', 'a')
print >>fh, "%s\n\tRun time : %s - %s " % (' '.join(sys.argv), startTime, endTime)
fh.close()
###---------profile the program--程序运行慢时的检测-------
#import profile
#profile_output = sys.argv[0]+".prof.txt")
#profile.run("main()", profile_output)
#import pstats
#p = pstats.Stats(profile_output)
#p.sort_stats("time").print_stats()
###---------profile the program---------